<?php

if(!defined("INCLUDE")) die("Nedostatečné oprávnění pro spouštění souboru.");

include_once ROOT . DS . "config" . DS . "database.php";

# --------------------------------------------------------------------------------------------------------------------------
# CLASS SQLQuery
# --------------------------------------------------------------------------------------------------------------------------
# Třída SQLquery vytváří a uzavírá spojení s mysql serverem, vytváření dle zadaných kritérií
# sql dotaz a vykonává běžné SQL akce - select, insert, update, delete. Ohlašování chybových 
# hlášek se řídí dle toho, zda je CMS ve vývojovém stavu či ve stavu pro použivání uživateli. 
# Ve vývojovém stavu navracení podrobné hlášení o chybě z mysql serveru a vypisuje vygenerovaný
# dotaz. Při běžném používání pouze informuje uživatele, že akce nemohla proběhnout.
# 
# --------------------------------------------------------------------------------------------------------------------------
# Proměnné
# --------------------------------------------------------------------------------------------------------------------------
#	private $link_resource; 				-- Proměnná pro ukládání odkazu na aktuální připojení.
#	private $table;									-- Proměnná pro SQL - tabulka/y se kterou se bude pracovat.
#	private $columns;								-- Proměnná pro SQL - sloupce se kterýma se bude pracovat.
#	private $values;								-- Proměnná pro SQL - hodnoty se kterýma se bude pracovat.
#	private $where = null;					-- Proměnná pro SQL - where podmínka.
#	private $like = null;						-- Proměnná pro SQL - like podmínka.
#	private $orderby = null;				-- Proměnná pro SQL - řazení jednotlivých řádků.
#	private $limit = null;					-- Proměnná pro SQL - limit pro sql.
#	private $limit_offset = null;		-- Proměnná pro SQL - začátek limitu.
#	private $query;									-- Proměnná pro SQL - vygenerovaný sql dotaz.
#
# --------------------------------------------------------------------------------------------------------------------------
# Funkce
# --------------------------------------------------------------------------------------------------------------------------
#	function create_connect();			-- Vytváření spojení s mysql serverem.
# function close_connect();				-- Uzavírání spojení s mysql serverem.
# function set_query();						-- Vytváří základní hodnoty dotazu.
# function set_where();						-- Vytváří where podmínku.
# function set_like();						-- Vytváří like podmínku.
# function set_orderby();					-- Vytváří klauzuli order by.
# function set_limit();						-- Vytváří klauzuli limit.
# function create_query($action); -- Vytváří ze zadaných klauzulí SQL dotaz.
# function select();							-- Zpracovává select příkaz.
# function update();							-- Zpracovává update příkaz.
# function insert();							-- Zpracovává insert příkaz.
# function delete();							-- Zpracovává delete příkaz.
#
# --------------------------------------------------------------------------------------------------------------------------
# INFORMACE O SOUBORU
# --------------------------------------------------------------------------------------------------------------------------
# Autor: Zechy
# Poslední úprava: 29. 11. 2012
#
# --------------------------------------------------------------------------------------------------------------------------
#
# --------------------------------------------------------------------------------------------------------------------------
# CLASS SQLQUERY
# --------------------------------------------------------------------------------------------------------------------------
class sqlquery
{
	# ------------------------------------------------------------------------------------------------------------------------
	# PROMĚNNÉ
	# ------------------------------------------------------------------------------------------------------------------------
	
	# Proměnná pro uložení aktuálního připojení k SQL
	private $link_resource;

	# Proměnné pro SQL dotaz
	private $table;
	private $columns;
	private $values = null;
	private $where = null;
	private $like = null;
	private $orderby = null;
	private $limit = null;
	private $offset = null;
	private $query;

	# ------------------------------------------------------------------------------------------------------------------------
	# ------------------------------------------------------------------------------------------------------------------------
	# FUNKCE
	# ------------------------------------------------------------------------------------------------------------------------
	# ------------------------------------------------------------------------------------------------------------------------
	# Připojení k SQL serveru
	# ------------------------------------------------------------------------------------------------------------------------
	# ------------------------------------------------------------------------------------------------------------------------
	public function create_connect()
	{
		if($this->link_resource = mysql_connect(db_host, db_user, db_pwd))
		{
			if(mysql_select_db(db_name))
			{
				mysql_set_charset(db_charset);
				return true;
			}
			else
			{
				return false;
			}
		}
		else
		{
			return false;
		}
	}

	public function close_connect()
	{
		if(@mysql_close($this->link_resource))
		{
			return true;
		}
		else
		{
			return false;
		}
	}

	# ------------------------------------------------------------------------------------------------------------------------
	# ------------------------------------------------------------------------------------------------------------------------
	# Uživatelské vytváření MySQL dotazu
	# ------------------------------------------------------------------------------------------------------------------------
	# ------------------------------------------------------------------------------------------------------------------------
	# Vynullování SQL dotazu
	# ------------------------------------------------------------------------------------------------------------------------
	public function setnull()
	{
		$this->values = null;
		$this->where = null;
		$this->like = null;
		$this->orderby = null;
		$this->limit = null;
		$this->offset = null;
	}

	# ------------------------------------------------------------------------------------------------------------------------
	# Nastavení tabulek
	# ------------------------------------------------------------------------------------------------------------------------
	public function set_table($table)
	{
		$this->table = $table;
	}
	
	# ------------------------------------------------------------------------------------------------------------------------
	# Nastavení sloupců
	# ------------------------------------------------------------------------------------------------------------------------
	public function set_columns($columns)
	{
		$this->columns = $columns;
	}
	
	# ------------------------------------------------------------------------------------------------------------------------
	# Nastavení hodnot
	# ------------------------------------------------------------------------------------------------------------------------
	public function set_values($values)
	{
		$this->values = $values;
	}

	# ------------------------------------------------------------------------------------------------------------------------
	# Nastavení hodnot v poli - používá se pro UPDATE dotazy
	# ------------------------------------------------------------------------------------------------------------------------
	public function set_values_array(array $values_array)
	{
		$this->values = $values_array;
	}

	# ------------------------------------------------------------------------------------------------------------------------
	# Nastavení where podmínky
	# ------------------------------------------------------------------------------------------------------------------------
	public function set_where($where_condition)
	{
		$this->where = "WHERE ".$where_condition;
	}

	# ------------------------------------------------------------------------------------------------------------------------
	# Nastavení like podmínky
	# ------------------------------------------------------------------------------------------------------------------------
	public function set_like($like_condition)
	{
		$this->like = $like_condition;
	}

	# ------------------------------------------------------------------------------------------------------------------------
	# Nastavení řazení výsledků
	# ------------------------------------------------------------------------------------------------------------------------
	public function set_orderby($orderby)
	{
		$this->orderby = "ORDER BY ".$orderby;
	}

	# ------------------------------------------------------------------------------------------------------------------------
	# Nastavení počtu dotazů
	# ------------------------------------------------------------------------------------------------------------------------
	public function set_limit($limit, $offset = null)
	{
		$this->limit = "LIMIT ".$limit;
		if(!is_null($offset)) $this->offset = " OFFSET ".$offset;
	}

	# ------------------------------------------------------------------------------------------------------------------------
	# Vytvoření SQL dotazu
	# ------------------------------------------------------------------------------------------------------------------------
	private function create_query($action)
	{
		if($action == "select")
		{
			$this->query = "SELECT ".$this->columns." FROM ".$this->table;
		}
		else if($action == "update")
		{
			$columns = explode(", ", $this->columns);
			$this->query = "UPDATE ".$this->table." SET ";
			for($a = 0; $a < count($columns); $a++)
			{
				$this->query .= $columns[$a]." = '".$this->values[$a]."', ";
			}
			$this->query = substr($this->query, 0, strlen($this->query) - 2);
		}
		else if($action == "insert")
		{
			$this->query = "INSERT INTO ".$this->table."(".$this->columns.") VALUES(".$this->values.")";
		}
		else if($action == "delete")
		{
			$this->query = "DELETE FROM ".$this->table;
		}

		if($action != "insert")
		{
			if(!is_null($this->where)) $this->query .= " ".$this->where;
			if(!is_null($this->like)) $this->query .= " ".$this->like;
			if(!is_null($this->orderby)) $this->query .= " ".$this->orderby;
			if(!is_null($this->limit)) $this->query .= " ".$this->limit;
			if(!is_null($this->offset)) $this->query .= " ".$this->offset;
		}

		return $this->query;
	}
	
	# ------------------------------------------------------------------------------------------------------------------------
	# ------------------------------------------------------------------------------------------------------------------------
	# Spuštění vytvořeného SQL dotazu
	# ------------------------------------------------------------------------------------------------------------------------
	# ------------------------------------------------------------------------------------------------------------------------
	#	SQL SELECT
	# ------------------------------------------------------------------------------------------------------------------------
	public function select()
	{
		$this->create_connect();
		$query = mysql_query($this->create_query("select"));
		if($query == false)
		{
			if(DEVELOPMENT == true)
			{
				$result = "<img src='theme/ikonky/database_error.png' align='absmiddle'> <b>Při vykonávání SQL dotazu se vyskytla chyba</b><br>";
				$result .= "<img src='theme/ikonky/script.png' align='absmiddle'> <b>Vygenerovaný SQL dotaz</b>: ".$this->query."<br>";
				$result .= "<img src='theme/ikonky/information.png' align='absmiddle'> <b>MySQL kod chybové hlášky</b>: ".mysql_errno()."<br>";
				$result .= "<img src='theme/ikonky/error.png' align='absmiddle'> <b>Navrácená chyba</b>: ".mysql_error();
				throw new Exception($result);
			}
			else
			{
				throw new Exception();
			}
		}
		else
		{
			if(mysql_num_rows($query) == 0)
			{
				$this->close_connect();
				return false;
			}
			else
			{
				$this->close_connect();
				return $query;
			}
		}
	}

	# ------------------------------------------------------------------------------------------------------------------------
	#	SQL UPDATE
	# ------------------------------------------------------------------------------------------------------------------------
	public function update()
	{
		$this->create_connect();
		$query = mysql_query($this->create_query("update"));
		if(!$query)
		{
			if(DEVELOPMENT == true)
			{
				$result = "<img src='theme/ikonky/database_error.png' align='absmiddle'> <b>Při vykonávání SQL dotazu se vyskytla chyba</b><br>";
				$result .= "<img src='theme/ikonky/script.png' align='absmiddle'> <b>Vygenerovaný SQL dotaz</b>: ".$this->query."<br>";
				$result .= "<img src='theme/ikonky/information.png' align='absmiddle'> <b>MySQL kod chybové hlášky</b>: ".mysql_errno()."<br>";
				$result .= "<img src='theme/ikonky/error.png' align='absmiddle'> <b>Navrácená chyba</b>: ".mysql_error();
				throw new Exception($result);
			}
			else
			{
				throw new Exception();
			}
		}
		else
		{
			if(mysql_affected_rows() != 0)
			{
				$this->close_connect();
				return true;
			}
			else
			{
				$this->close_connect();
				return false;
			}
		}
	}

	# ------------------------------------------------------------------------------------------------------------------------
	#	SQL INSERT
	# ------------------------------------------------------------------------------------------------------------------------
	public function insert()
	{
		$this->create_connect();
		$query = mysql_query($this->create_query("insert"));
		if(!$query)
		{
			if(DEVELOPMENT == true)
			{
				$result = "<img src='theme/ikonky/database_error.png' align='absmiddle'> <b>Při vykonávání SQL dotazu se vyskytla chyba</b><br>";
				$result .= "<img src='theme/ikonky/script.png' align='absmiddle'> <b>Vygenerovaný SQL dotaz</b>: ".$this->query."<br>";
				$result .= "<img src='theme/ikonky/information.png' align='absmiddle'> <b>MySQL kod chybové hlášky</b>: ".mysql_errno()."<br>";
				$result .= "<img src='theme/ikonky/error.png' align='absmiddle'> <b>Navrácená chyba</b>: ".mysql_error();
				throw new Exception($result);
			}
			else
			{
				throw new Exception();
			}
		}
		else if(mysql_affected_rows() != 0)
		{
			$this->close_connect();
			return true;
		}
		else
		{
			$this->close_connect();
			return false;
		}
	}

	# ------------------------------------------------------------------------------------------------------------------------
	#	SQL DELETE
	# ------------------------------------------------------------------------------------------------------------------------
	public function delete()
	{
		$this->create_connect();
		$query = mysql_query($this->create_query("delete"));
		if(!$query)
		{
			if(DEVELOPMENT == true)
			{
				$result = "<img src='theme/ikonky/database_error.png' align='absmiddle'> <b>Při vykonávání SQL dotazu se vyskytla chyba</b><br>";
				$result .= "<b>Vygenerovaný SQL dotaz</b>: ".$this->query."<br>";
				$result .= "<b>MySQL kod chybové hlášky</b>: ".mysql_errno()."<br>";
				$result .= "<img src='theme/ikonky/error.png' align='absmiddle'> <b>Navrácená chyba</b>: ".mysql_error();
				throw new Exception($result);
			}
			else
			{
				throw new Exception();
			}
		}
		else if(mysql_affected_rows() != 0)
		{
			$this->close_connect();
			return true;
		}
		else
		{
			$this->close_connect();
			return false;
		}
	}
}

?>